package backtype.storm.scheduler;

import java.util.Collection;
import java.util.Map;
import java.util.Set;


public interface INimbus {
    void prepare(Map stormConf, String schedulerLocalDir);


    /**
     * Returns all slots that are available for the next round of scheduling. A
     * slot is available for scheduling if it is free and can be assigned to, or
     * if it is used and can be reassigned.
     */
    Collection<WorkerSlot> allSlotsAvailableForScheduling(Collection<SupervisorDetails> existingSupervisors,
            Topologies topologies, Set<String> topologiesMissingAssignments);


    // this is called after the assignment is changed in ZK
    void assignSlots(Topologies topologies, Map<String, Collection<WorkerSlot>> newSlotsByTopologyId);


    // map from node id to supervisor details
    String getHostName(Map<String, SupervisorDetails> existingSupervisors, String nodeId);


    IScheduler getForcedScheduler();
}
